{
PROG: twohead
LANG: PASCAL
}
const     INP       =        'twohead.in'  ;
          OUT       =        'twohead.out' ;

          maxn      =        25001 ;
          maxm      =        50001 ;

var       n , m     :        longint ;
          a         :        array[1..maxm]     of integer ;
          deg       :        array[0..maxn]     of word    ;
          lab       :        array[-maxn..maxn] of longint ;
          fi , fo   :        text    ;

function get_root( u : integer ) : integer ;
begin
     while lab[u] <= n do u := lab[u] ;
     exit( u ) ;
end ;

procedure union( u1 , u2 : integer ) ;
begin
     if lab[u1] > lab[u2] then begin
        inc( lab[u1] , lab[u2] - n ) ;
        lab[u2] := u1 ;
     end
         else begin
             inc( lab[u2] , lab[u1] - n ) ;
             lab[u1] := u2 ;
         end ;
end ;

function ok( st , u : integer ) : boolean ;
var
     i , v , u1 , u2 : longint ;
begin
     for i := deg[u] + 1 to deg[u+1] do begin
         v := a[i] ;
         if abs( v ) < st then continue ;

         u1 := get_root( u ) ;
         u2 := get_root( v ) ;
         if u1 <> u2 then union( u1 , u2 ) ;

         u1 := get_root( -u ) ;
         u2 := get_root( -v ) ;
         if u1 <> u2 then union( u1 , u2 ) ;
     end ;

     u1 := get_root( u )  ;
     u2 := get_root( -u ) ;
     if u1 = u2 then exit( false ) else exit( true ) ;
end ;

procedure process ;
var
     st , day , kt : integer ;
begin
     st  := 1 ;
     day := 0 ;
     while st <= n do begin
           inc( day ) ;
           kt := st + 1 ;
           lab[st]  := n + 1 ;
           lab[-st] := n + 1 ;
           while ( kt <= n ) and ok( st , kt ) do inc( kt ) ;
           st := kt ;
     end ;

     writeln( fo , day ) ;
end ;

procedure nhapdl ;
var
     i , u , v , tg : longint ;
     ch1 , ch2 : char ;
begin
     readln( fi , n , m ) ;
     for i := 1 to m do begin
         readln( fi , u , ch1 , ch1 , v , ch2 , ch2 )   ;
         if u < v then inc( deg[v] ) else inc( deg[u] ) ;
     end ;

     for i := 1 to n+1 do inc( deg[i] , deg[i-1] ) ;

     reset( fi ) ;
     readln( fi , n , m ) ;
     for i := 1 to m do begin
         readln( fi , u , ch1 , ch1 , v , ch2 , ch2 ) ;
         if u < v then begin
            tg := u ; u := v ; v := tg ;
         end ;

         if ch1 = ch2 then v := -v ;
         a[ deg[u] ] := v ; dec( deg[u] ) ;
     end ;
end ;

procedure init ;
var
     i : integer ;
begin
     for i := -n to n do lab[i] := n+1 ;
end ;

procedure mofile ;
begin
     assign( fi , INP ) ; reset( fi )   ;
     assign( fo , OUT ) ; rewrite( fo ) ;
end ;

procedure dongfile ;
begin
     close( fi ) ; close( fo ) ;
end ;

BEGIN
     mofile   ;
     nhapdl   ;
     init     ;
     process  ;
     dongfile ;
END.